[PR]

水無瀬の部屋 > Programming > sample > tools > ctrl > picker > picker.cpp
最終更新日: 2007/03/24

   1: //*********************************************************
   2: // プロジェクト: picker
   3: //   ファイル名: picker.cpp
   4: //*********************************************************
   5: #include <ctrl/picker/picker.h>
   6: #include <header/tooldbg.h>  // ASSERT(), VERIFY(), 
   7: #include <header/toolbase.h>        // 
   8: #include <header/toolwind.h>
   9: 
  10: 
  11: //---------------------------------------------------------
  12: // マクロ の 定義
  13: //---------------------------------------------------------
  14: #define PROP_ORIGINALPROC "PCPROP_ORIGINALPROC"
  15: 
  16: 
  17: //---------------------------------------------------------
  18: // ファイルスコープ関数 の 宣言
  19: //---------------------------------------------------------
  20: static LRESULT Picker_SendBeginDragMessage( HWND hWnd );
  21: static LRESULT Picker_SendEndDragMessage( HWND hWnd );
  22: static LRESULT Picker_SendContextMenuMessage( HWND hWnd );
  23: static LRESULT Picker_SendRightClickMessage( HWND hWnd );
  24: static LRESULT Picker_SendDroppedMessage( HWND hWnd );
  25: static LRESULT Picker_SendMouseMoveMessage( HWND hWnd, WPARAM wParam, LPARAM lParam );
  26: static LRESULT Picker_SendKeyDownMessage( HWND hWnd, WPARAM wParam, LPARAM lParam );
  27: static LRESULT CallOriginalProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  28: static LRESULT CALLBACK PickerProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  29: 
  30: 
  31: //*********************************************************
  32: // SubclassPickerCtrl
  33: //*********************************************************
  34: bool
  35: SubclassPickerCtrl
  36: 	(
  37: 		HWND hWnd
  38: 	)
  39: {
  40: 	// パラメタの仮定
  41: 	ASSERT( IsValidWindow( hWnd ) );
  42: 
  43: 	WNDPROC OriginalProc = SubclassWindow64( hWnd, PickerProc );
  44: 	VERIFY( SetProp( hWnd, PROP_ORIGINALPROC, OriginalProc ) );
  45: 	return true;
  46: }//SubclassPickerCtrl
  47: 
  48: 
  49: //******************************************************************************************************************
  50: // private 
  51: //******************************************************************************************************************
  52: static LRESULT OnPickerDestroy( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  53: static LRESULT OnPickerMouseMove( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  54: static LRESULT OnPickerLeftButtonDown( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  55: static LRESULT OnPickerLeftButtonUp( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  56: static LRESULT OnPickerCaptureChanged( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  57: static LRESULT OnPickerKeyDown( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  58: static LRESULT OnPickerRightButtonUp( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  59: static LRESULT OnPickerNotify( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  60: static LRESULT OnPickerNotifyKeyDown( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  61: static LRESULT OnPickerNotifyKeyDownApps( HWND hWnd, LPARAM lParam );
  62: static LRESULT OnPickerNotifyRightClick( HWND hWnd, LPARAM lParam );
  63: 
  64: 
  65: //*********************************************************
  66: // PickerProc
  67: //*********************************************************
  68: static
  69: LRESULT
  70: CALLBACK
  71: PickerProc
  72: 	(
  73: 		HWND   hWnd,
  74: 		UINT   uMsg, 
  75: 		WPARAM wParam,
  76: 		LPARAM lParam
  77: 	)
  78: {
  79: 	// パラメタの仮定
  80: 	ASSERT( IsValidWindow( hWnd ) );
  81: 
  82: 	switch( uMsg )
  83: 	{
  84: 		case WM_DESTROY:        return OnPickerDestroy( hWnd, uMsg, wParam, lParam );
  85: 		case WM_NOTIFY:         return OnPickerNotify( hWnd, uMsg, wParam, lParam );
  86: 		case WM_KEYDOWN:        return OnPickerKeyDown( hWnd, uMsg, wParam, lParam );
  87: 		case WM_MOUSEMOVE:      return OnPickerMouseMove( hWnd, uMsg, wParam, lParam );
  88: 		case WM_LBUTTONDOWN:    return OnPickerLeftButtonDown( hWnd, uMsg, wParam, lParam );
  89: 		case WM_LBUTTONUP:      return OnPickerLeftButtonUp( hWnd, uMsg, wParam, lParam );
  90: 		case WM_RBUTTONUP:      return OnPickerRightButtonUp( hWnd, uMsg, wParam, lParam );
  91: 		case WM_CAPTURECHANGED: return OnPickerCaptureChanged( hWnd, uMsg, wParam, lParam );
  92: 		default:                return CallOriginalProc( hWnd, uMsg, wParam, lParam );
  93: 	}
  94: }//PickerProc
  95: 
  96: //*********************************************************
  97: // OnPickerDestroy - WM_DESTROY
  98: //*********************************************************
  99: static
 100: LRESULT
 101: OnPickerDestroy
 102: 	(
 103: 		HWND   hWnd,
 104: 		UINT   uMsg,
 105: 		WPARAM wParam,
 106: 		LPARAM lParam
 107: 	)
 108: {
 109: 	// パラメタの仮定
 110: 	ASSERT( IsValidWindow( hWnd ) );
 111: 	ASSERT( WM_DESTROY == uMsg );
 112: 
 113: 	// サブクラス化の解除
 114: 	WNDPROC OriginalProc = (WNDPROC)GetProp( hWnd, PROP_ORIGINALPROC );
 115: 	VERIFY( RemoveProp( hWnd, PROP_ORIGINALPROC ) );
 116: 	VERIFY( SubclassWindow64( hWnd, OriginalProc ) );
 117: 
 118: 	return CallWindowProc( OriginalProc, hWnd, uMsg, wParam, lParam );
 119: }//OnPickerDestroy
 120: 
 121: //*********************************************************
 122: // OnPickerKeyDown
 123: //*********************************************************
 124: static
 125: LRESULT
 126: OnPickerKeyDown
 127: 	(
 128: 		HWND   hWnd,
 129: 		UINT   uMsg,
 130: 		WPARAM wParam,
 131: 		LPARAM lParam
 132: 	)
 133: {
 134: 	// パラメタの仮定
 135: 	ASSERT( IsValidWindow( hWnd ) );
 136: 	ASSERT( WM_KEYDOWN == uMsg );
 137: 	ASSERT( hWnd == GetFocus() );
 138: 	ASSERT( IsValidKeyDownMessageParam( wParam, lParam ) );
 139: 	
 140: 	// ドラッグ中
 141: 	if ( hWnd == GetCapture() )
 142: 		return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 143: 
 144: 	// 親へ WM_KEYDOWN を通知
 145: 	Picker_SendKeyDownMessage( hWnd, wParam, lParam );
 146: 	return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 147: }//OnPickerKeyDown
 148: 
 149: //*********************************************************
 150: // OnPickerMouseMove - WM_MOUSEMOVE
 151: // D&Dの中
 152: //*********************************************************
 153: static
 154: LRESULT
 155: OnPickerMouseMove
 156: 	(
 157: 		HWND   hWnd, 
 158: 		UINT   uMsg,
 159: 		WPARAM wParam, 
 160: 		LPARAM lParam
 161: 	)
 162: {
 163: 	// パラメタの仮定
 164: 	ASSERT( IsValidWindow( hWnd ) );
 165: 	ASSERT( WM_MOUSEMOVE == uMsg );
 166: 
 167: 	// 通常時
 168: 	if ( hWnd != GetCapture() )
 169: 		return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 170: 
 171: 	// 親へ PCN_MOUSEMOVE を通知
 172: 	Picker_SendMouseMoveMessage( hWnd, wParam, lParam );
 173: 	return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 174: }//OnPickerMouseMove
 175: 
 176: //*********************************************************
 177: // OnPickerLeftButtonDown - WM_LBUTTONDOWN
 178: // D&Dの開始
 179: //*********************************************************
 180: static
 181: LRESULT
 182: OnPickerLeftButtonDown
 183: 	(
 184: 		HWND   hWnd,
 185: 		UINT   uMsg,
 186: 		WPARAM wParam,
 187: 		LPARAM lParam
 188: 	)
 189: {
 190: 	// パラメタの仮定
 191: 	ASSERT( IsValidWindow( hWnd ) );
 192: 	ASSERT( WM_LBUTTONDOWN == uMsg );
 193: 
 194: 	// 親へD&Dの開始を通知
 195: 	if ( 0 != Picker_SendBeginDragMessage( hWnd ) )
 196: 		return false; // キャンセルされた
 197: 
 198: 	SetCapture( hWnd );
 199: 	return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 200: }//OnPickerLeftButtonDown
 201: 
 202: //*********************************************************
 203: // OnPickerLeftButtonUp - WM_LBUTTONUP
 204: // ドロップ
 205: //*********************************************************
 206: static
 207: LRESULT
 208: OnPickerLeftButtonUp
 209: 	(
 210: 		HWND   hWnd,
 211: 		UINT   uMsg,
 212: 		WPARAM wParam,
 213: 		LPARAM lParam
 214: 	)
 215: {
 216: 	// パラメタの仮定
 217: 	ASSERT( IsValidWindow( hWnd ) );
 218: 	ASSERT( WM_LBUTTONUP == uMsg );
 219: 
 220: 	if ( hWnd == GetCapture() )
 221: 	{
 222: 		// 親へドロップを通知
 223: 		Picker_SendDroppedMessage( hWnd );
 224: 		VERIFY( ReleaseCapture() );
 225: 	}
 226: 	return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 227: }//OnPickerLeftButtonUp
 228: 
 229: //*********************************************************
 230: // OnPickerRightButtonUp - WM_RBUTTONUP
 231: //*********************************************************
 232: static
 233: LRESULT
 234: OnPickerRightButtonUp
 235: 	(
 236: 		HWND   hWnd,
 237: 		UINT   uMsg,
 238: 		WPARAM wParam,
 239: 		LPARAM lParam
 240: 	)
 241: {
 242: 	// パラメタの仮定
 243: 	ASSERT( IsValidWindow( hWnd ) );
 244: 	ASSERT( WM_RBUTTONUP == uMsg );
 245: 
 246: 	// ドラッグ中
 247: 	if ( hWnd == GetCapture() )
 248: 		return 0;
 249: 	ASSERT( hWnd != GetCapture() );
 250: 
 251: 	// 親へ右クリックを通知
 252: 	Picker_SendRightClickMessage( hWnd );
 253: 	return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 254: }//OnPickerRightButtonUp
 255: 
 256: //*********************************************************
 257: // OnPickerCaptureChanged - WM_CAPTURECHANGED
 258: // D&D状態の終了(ドロップとは限らない)
 259: //*********************************************************
 260: static
 261: LRESULT
 262: OnPickerCaptureChanged
 263: 	(
 264: 		HWND   hWnd,
 265: 		UINT   uMsg,
 266: 		WPARAM wParam,
 267: 		LPARAM lParam
 268: 	)
 269: {
 270: 	// パラメタの仮定
 271: 	ASSERT( IsValidWindow( hWnd ) );
 272: 	ASSERT( WM_CAPTURECHANGED == uMsg );
 273: 
 274: 	HWND hCapture = reinterpret_cast<HWND>( lParam );
 275: 	if ( hWnd != hCapture )
 276: 	{
 277: 		// 親へD&Dの終了を通知
 278: 		Picker_SendEndDragMessage( hWnd );
 279: 		VERIFY( InvalidateRect( hWnd, null, false ) );
 280: 	}
 281: 
 282: 	return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 283: }//OnPickerCaptureChanged
 284: 
 285: 
 286: //******************************************************************************************************************
 287: // REFLECT
 288: //******************************************************************************************************************
 289: //*********************************************************
 290: // OnPickerNotify - WM_NOTIFY
 291: // 子ウィンドウから通知メッセージを受け取った。
 292: // 返値の意味は通知メッセージの種類による。
 293: //   int    wParam …… メッセージを通知してきたウィンドウの識別子
 294: //   NMHDR *lParam …… 通知メッセージ構造体へのポインタ
 295: //*********************************************************
 296: static
 297: LRESULT
 298: OnPickerNotify
 299: 	(
 300: 		HWND   hWnd,
 301: 		UINT   uMsg,
 302: 		WPARAM wParam,
 303: 		LPARAM lParam
 304: 	)
 305: {
 306: 	// パラメタの仮定
 307: 	ASSERT( IsValidWindow( hWnd ) );
 308: 	ASSERT( IsValidNotifyMessageParam( wParam, lParam ) );
 309: 	ASSERT( IsWindowNotifyMessageParam( hWnd, lParam ) );
 310: 	ASSERT( IsValidPtr( (NMPICKER *)lParam, sizeof( NMPICKER ) ) );
 311: 	ASSERT( wParam == (UINT)GetDlgCtrlID( hWnd ) );
 312: 	ASSERT( WM_NOTIFY == uMsg );
 313: 
 314: 	const UINT uNotifyCode = GetNotifyMessageNotifyCode( lParam );
 315: 	switch( uNotifyCode )
 316: 	{
 317: 		case PCN_KEYDOWN: return OnPickerNotifyKeyDown( hWnd, uMsg, wParam, lParam );
 318: 		case PCN_RCLICK:  return OnPickerNotifyRightClick( hWnd, lParam );
 319: 		default:          return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 320: 	}
 321: }//OnPickerNotify
 322: 
 323: //*********************************************************
 324: // OnPickerNotifyKeyDown
 325: //*********************************************************
 326: static
 327: LRESULT
 328: OnPickerNotifyKeyDown
 329: 	(
 330: 		HWND   hWnd,
 331: 		UINT   uMsg,
 332: 		WPARAM wParam,
 333: 		LPARAM lParam
 334: 	)
 335: {
 336: 	// パラメタの仮定
 337: 	ASSERT( IsValidWindow( hWnd ) );
 338: 	ASSERT( IsValidPtr( (NMPICKER *)lParam, sizeof( NMPICKER ) ) );
 339: 	ASSERT( IsWindowNotifyMessageParam( hWnd, lParam ) );
 340: 	ASSERT( PCN_KEYDOWN == GetNotifyMessageNotifyCode( lParam ) );
 341: 	ASSERT( wParam == (UINT)GetDlgCtrlID( hWnd ) );
 342: 	ASSERT( WM_NOTIFY == uMsg );
 343: 
 344: 	const NMPICKER *nmpc = reinterpret_cast<NMPICKER *>( lParam );
 345: 	switch( nmpc->wParam )
 346: 	{
 347: 		case VK_APPS: return OnPickerNotifyKeyDownApps( hWnd, lParam );
 348: 		default:      return CallOriginalProc( hWnd, uMsg, wParam, lParam );
 349: 	}
 350: }//OnPickerNotifyKeyDown
 351: 
 352: //*********************************************************
 353: // OnPickerNotifyKeyDownApps
 354: //*********************************************************
 355: static
 356: LRESULT
 357: OnPickerNotifyKeyDownApps
 358: 	(
 359: 		HWND   hWnd,
 360: 		LPARAM _unuse( lParam )
 361: 	)
 362: {
 363: 	// パラメタの仮定
 364: 	ASSERT( IsValidWindow( hWnd ) );
 365: 	ASSERT( IsValidPtr( (NMPICKER *)lParam, sizeof( NMPICKER ) ) );
 366: 	ASSERT( IsWindowNotifyMessageParam( hWnd, lParam ) );
 367: 	ASSERT( VK_APPS == ((NMPICKER *)lParam)->wParam );
 368: 	ASSERT( PCN_KEYDOWN == GetNotifyMessageNotifyCode( lParam ) );
 369: 
 370: 	// 親へ PCN_CONTEXTMENU を通知
 371: 	Picker_SendContextMenuMessage( hWnd );
 372: 	return 0L;
 373: }//OnPickerNotifyKeyDownApps
 374: 
 375: //*********************************************************
 376: // OnPickerNotifyRightClick
 377: //*********************************************************
 378: static
 379: LRESULT
 380: OnPickerNotifyRightClick
 381: 	(
 382: 		HWND   hWnd,
 383: 		LPARAM _unuse( lParam )
 384: 	)
 385: {
 386: 	// パラメタの仮定
 387: 	ASSERT( IsValidWindow( hWnd ) );
 388: 	ASSERT( IsValidPtr( (NMPICKER *)lParam, sizeof( NMPICKER ) ) );
 389: 	ASSERT( IsWindowNotifyMessageParam( hWnd, lParam ) );
 390: 	ASSERT( PCN_RCLICK == GetNotifyMessageNotifyCode( lParam ) );
 391: 
 392: 	// 親へ PCN_CONTEXTMENU を通知
 393: 	Picker_SendContextMenuMessage( hWnd );
 394: 
 395: 	return 0L;
 396: }//OnPickerNotifyRightClick
 397: 
 398: 
 399: //******************************************************************************************************************
 400: // message 
 401: //******************************************************************************************************************
 402: //*********************************************************
 403: // Picker_SendBeginDragMessage
 404: //   親へD&Dの開始を通知
 405: //*********************************************************
 406: static
 407: LRESULT
 408: Picker_SendBeginDragMessage
 409: 	(
 410: 		HWND hWnd
 411: 	)
 412: {
 413: 	// パラメタの仮定
 414: 	ASSERT( IsValidWindow( hWnd ) );
 415: 
 416: 	NMPICKER nmpc;
 417: 	memzero( &nmpc, sizeof( nmpc ) );
 418: 	VERIFY( MakeNotifyStruct( &nmpc.hdr, hWnd, PCN_BEGINDRAG ) );
 419: 	HWND hParent = GetParent( hWnd );
 420: 	return SendMessage
 421: 		(
 422: 			hParent,
 423: 			WM_NOTIFY,
 424: 			nmpc.hdr.idFrom,
 425: 			reinterpret_cast<LPARAM>( &nmpc )
 426: 		);
 427: }//Picker_SendBeginDragMessage
 428: 
 429: //*********************************************************
 430: // Picker_SendEndDragMessage
 431: //   親へD&Dの終了を通知
 432: //*********************************************************
 433: static
 434: LRESULT
 435: Picker_SendEndDragMessage
 436: 	(
 437: 		HWND hWnd
 438: 	)
 439: {
 440: 	// パラメタの仮定
 441: 	ASSERT( IsValidWindow( hWnd ) );
 442: 	
 443: 	NMPICKER nmpc;
 444: 	memzero( &nmpc, sizeof( nmpc ) );
 445: 	VERIFY( MakeNotifyStruct( &nmpc.hdr, hWnd, PCN_ENDDRAG ) );
 446: 	HWND hParent = GetParent( hWnd );
 447: 	return SendMessage
 448: 		(
 449: 			hParent,
 450: 			WM_NOTIFY,
 451: 			nmpc.hdr.idFrom,
 452: 			reinterpret_cast<LPARAM>( &nmpc )
 453: 		);
 454: }//Picker_SendEndDragMessage
 455: 
 456: //*********************************************************
 457: // Picker_SendMouseMoveMessage
 458: //   親へ WM_MOUSEMOVE を通知
 459: //*********************************************************
 460: static
 461: LRESULT
 462: Picker_SendMouseMoveMessage
 463: 	(
 464: 		HWND   hWnd,
 465: 		WPARAM wParam, 
 466: 		LPARAM lParam
 467: 	)
 468: {
 469: 	// パラメタの仮定
 470: 	ASSERT( IsValidWindow( hWnd ) );
 471: 
 472: 	NMPICKER nmpc;
 473: 	memzero( &nmpc, sizeof( nmpc ) );
 474: 	VERIFY( MakeNotifyStruct( &nmpc.hdr, hWnd, PCN_MOUSEMOVE ) );
 475: 	nmpc.wParam = wParam;
 476: 	nmpc.lParam = lParam;
 477: 	HWND hParent = GetParent( hWnd );
 478: 	return SendMessage
 479: 		(
 480: 			hParent,
 481: 			WM_NOTIFY, 
 482: 			nmpc.hdr.idFrom,
 483: 			reinterpret_cast<LPARAM>( &nmpc )
 484: 		);
 485: }//Picker_SendMouseMoveMessage
 486: 
 487: //*********************************************************
 488: // Picker_SendDroppedMessage
 489: //   親へドロップを通知
 490: //*********************************************************
 491: static
 492: LRESULT
 493: Picker_SendDroppedMessage
 494: 	(
 495: 		HWND hWnd
 496: 	)
 497: {
 498: 	// パラメタの仮定
 499: 	ASSERT( IsValidWindow( hWnd ) );
 500: 
 501: 	NMPICKER nmpc;
 502: 	memzero( &nmpc, sizeof( nmpc ) );
 503: 	VERIFY( MakeNotifyStruct( &nmpc.hdr, hWnd, PCN_DROPPED ) );
 504: 	//
 505: 	HWND hParent = GetParent( hWnd );
 506: 	return SendMessage
 507: 		(
 508: 			hParent,
 509: 			WM_NOTIFY,
 510: 			nmpc.hdr.idFrom,
 511: 			reinterpret_cast<LPARAM>( &nmpc )
 512: 		);
 513: }//Picker_SendDroppedMessage
 514: 
 515: //*********************************************************
 516: // Picker_SendContextMenuMessage
 517: //   親へ WM_CONTEXTMENU を通知
 518: //*********************************************************
 519: static
 520: LRESULT
 521: Picker_SendContextMenuMessage
 522: 	(
 523: 		HWND hWnd
 524: 	)
 525: {
 526: 	// パラメタの仮定
 527: 	ASSERT( IsValidWindow( hWnd ) );
 528: 
 529: 	NMPICKER nmpc;
 530: 	memzero( &nmpc, sizeof( nmpc ) );
 531: 	VERIFY( MakeNotifyStruct( &nmpc.hdr, hWnd, PCN_CONTEXTMENU ) );
 532: 	HWND hParent = GetParent( hWnd );
 533: 	return SendMessage
 534: 		(
 535: 			hParent,
 536: 			WM_NOTIFY, 
 537: 			nmpc.hdr.idFrom,
 538: 			reinterpret_cast<LPARAM>( &nmpc )
 539: 		);
 540: }//Picker_SendContextMenuMessage
 541: 
 542: //*********************************************************
 543: // Picker_SendRightClickMessage
 544: //   親へ右クリックを通知
 545: //*********************************************************
 546: static
 547: LRESULT
 548: Picker_SendRightClickMessage
 549: 	(
 550: 		HWND hWnd
 551: 	)
 552: {
 553: 	// パラメタの仮定
 554: 	ASSERT( IsValidWindow( hWnd ) );
 555: 
 556: 	NMPICKER nmpc;
 557: 	memzero( &nmpc, sizeof( nmpc ) );
 558: 	VERIFY( MakeNotifyStruct( &nmpc.hdr, hWnd, PCN_RCLICK ) );
 559: 	HWND hParent = GetParent( hWnd );
 560: 	return SendMessage
 561: 		(
 562: 			hParent,
 563: 			WM_NOTIFY,
 564: 			nmpc.hdr.idFrom,
 565: 			reinterpret_cast<LPARAM>( &nmpc )
 566: 		);
 567: }//Picker_SendRightClickMessage
 568: 
 569: //*********************************************************
 570: // Picker_SendKeyDownMessage
 571: //   親へ WM_KEYDOWN を通知
 572: //*********************************************************
 573: static
 574: LRESULT
 575: Picker_SendKeyDownMessage
 576: 	(
 577: 		HWND   hWnd,
 578: 		WPARAM wParam,
 579: 		LPARAM lParam
 580: 	)
 581: {
 582: 	// パラメタの仮定
 583: 	ASSERT( IsValidWindow( hWnd ) );
 584: 
 585: 	NMPICKER nmpc;
 586: 	memzero( &nmpc, sizeof( nmpc ) );
 587: 	VERIFY( MakeNotifyStruct( &nmpc.hdr, hWnd, PCN_KEYDOWN ) );
 588: 	nmpc.wParam = wParam;
 589: 	nmpc.lParam = lParam;
 590: 	HWND hParent = GetParent( hWnd );
 591: 	return SendMessage
 592: 		(
 593: 			hParent, 
 594: 			WM_NOTIFY,
 595: 			nmpc.hdr.idFrom,
 596: 			reinterpret_cast<LPARAM>( &nmpc )
 597: 		);
 598: }//Picker_SendKeyDownMessage
 599: 
 600: 
 601: //******************************************************************************************************************
 602: // util
 603: //******************************************************************************************************************
 604: //*********************************************************
 605: // CallOriginalProc
 606: //*********************************************************
 607: static
 608: LRESULT
 609: CallOriginalProc
 610: 	(
 611: 		HWND   hWnd,
 612: 		UINT   uMsg, 
 613: 		WPARAM wParam,
 614: 		LPARAM lParam
 615: 	)
 616: {
 617: 	// パラメタの仮定
 618: 	ASSERT( IsValidWindow( hWnd ) );
 619: 
 620: 	WNDPROC OriginalProc = (WNDPROC)GetProp( hWnd, PROP_ORIGINALPROC );
 621: 	return CallWindowProc( OriginalProc, hWnd, uMsg, wParam, lParam );
 622: }//CallOriginalProc
 623: 
 624: 
 625: //** end **

参照:


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬の部屋 > sample > tools > ctrl > picker > picker.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/tools/ctrl/picker/picker_cpp.shtml
『新妻LOVELY×CATION』を応援しています!